#!/usr/bin/env python
# -*- coding: utf-8 -*-  # 必须放在文件最前面
import socket

def server(*,host='0.0.0.0',port=10000):
    """
    tcp socket 通讯 服务端
    :return:
    """

    with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:

        #初始化socket
        print('服务端主机名称：'+socket.gethostname())
        # 元祖接收参数
        # 0.0.0.0 监听所有网络接口
        # 127.0.0.1 仅限本地回环 127.0.0.1 或 localhost
        # 真实IP 127.0.0.1 或 localhost
        s.bind((host,port))
        # 设置监听连接（最多有100个排队）尚未调用 accept() 处理时
        s.listen(100)
        print('服务端已经启动监听：')

        #接收连接
        #conn（通常称为 “连接对象” 或 “客户端套接字”）,代表了服务器与该客户端之间的专属通信链路
        #一个新的 socket 对象，专门用于与当前连接的客户端进行数据通信（发送 / 接收数据）。
        #服务器通过这个对象与客户端交互，例如使用 conn.recv() 接收客户端数据，使用 conn.send() 向客户端发送数据。

        #addr（通常称为 “客户端地址”）
        #元组（tuple），包含了连接到服务器的客户端的网络地址信息
        conn,addr =s.accept()
        print(f"客户端信息:{addr}")
        with conn:
            while True:
                rec=conn.recv(1024)
                if not rec:
                    break
                print(f"收到客户端消息：{rec.decode()}")
                # 通过 conn 向客户端发送响应
                conn.sendall("好的".encode())

if __name__ == "__main__":
    server()